Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.02.2017, 15:44
Интересующийся
Отправить личное сообщение для ПавелСедой Посмотреть профиль Найти все сообщения от ПавелСедой
 
Регистрация: 14.02.2017
Сообщений: 12

AJAX обработка форм
Столкнулся с проблемой при выполнении AJAX обработки форм:

Форма:
<form method="post" action="functions/auth.php">
                <ul id="inputEmailPass">
                    <h3>Вход</h3>
                    <p id="messageAuth">Неверный логин или пароль!</p>
                    <li><center><input type="text" name="authLogin" id="authLogin" placeholder="Введите логин"></center></li>
                    <li><center><input type="password" name="authPass" id="authPass" placeholder="Пароль"></center></li>
                    <ul id="listAuth">
                        <li><input type="checkbox" name="rememberMe" id="rememberMe"><label for="rememberMe">Запомнить меня</label></li>
                        <li><a id="remindPass" href="#">Забыли пароль?</a></li>
                    </ul>
                    <p align="right" id="buttonAuth"><a>Вход</a></p>
                </ul>
            </form>


$(document).ready(function() {
var authLogin = $("#authLogin").val();
    	var authPass = $("#authPass").val();

    	if(authLogin === "" || authLogin.length > 30) {
    		$("#authLogin").css("borderColor", "#FDB6B6");
    		sendLogin = 'no';
    	} else {
    		$("#authLogin").css("borderColor", "#DBDBDB");
    		sendLogin = 'yes';
    	}

    	if(authPass === "" || authPass.length > 15) {
    		$("#authPass").css("borderColor", "#FDB6B6");
    		sendPass = 'no';
    	} else {
    		$("#authPass").css("borderColor", "#DBDBDB");
    		sendPass = 'yes';
    	}

    	if($("#rememberMe").prop('checked')) {
    		authRememberMe = 'yes';
    	} else {
    		authRememberMe = 'no';
    	}

    	if(sendLogin === 'yes' && sendPass === 'yes') {
    		$("#buttonAuth").hide();
    		$.ajax({
    			type: "POST",
    			url: "functions/auth.php",
    			data: "login=" + authLogin + "&pass=" + authPass + "&rememberMe=" + authRememberMe,
    			dataType: "html",
    			cache: false,
    			success: function(data) {
    				if(data == 'yesAuth'){
    					location.reload();
    				} else {
    					$("#messageAuth").slideDown(400);
    					$("#buttonAuth").show();
    				}
    			}
    		});
    	}
    });

});


и PHP обработчик:
<?php
require_once "functions.php";

if($_SERVER["REQUEST_METHOD"] == "POST") {
	$login = strtolower(clearString($_POST['login']));
	$pass = strrev(md5(clearString($_POST['pass'])));
	$pass = strtolower("ah40d".$pass."m6me9w");

	if($_POST['remrmberMe'] == 'yes'):
		setcookie('rememberMe', $login.'+'.$pass, time() + 3600*24*31, "/");
	endif;

	connectDB();
	$query = $mysqli->query("SELECT * FROM `users` WHERE `login`='$login' AND `pass`='$pass'");
	closeDB();
	$rows = $query->num_rows;
	if($rows > 0):
		$userSession = resultToArray($query);

		$_SESSION['auth'] = 'yesAuth';
		$_SESSION['authPass'] = $userSession['pass'];
		$_SESSION['authLogin'] = $userSession['login'];
		$_SESSION['authSurname'] = $userSession['surname'];
		$_SESSION['authName'] = $userSession['name'];
		$_SESSION['authPatronymic'] = $userSession['patronymic'];
		$_SESSION['authAddress'] = $userSession['address'];
		$_SESSION['authPhone'] = $userSession['phone'];
		$_SESSION['authEmail'] = $userSession['email'];

		echo 'yesAuth';
	else: echo 'noAuth';
	endif;
}


Обработчик PHP проверял отдельно (менял POST на GET и передавал переменные) - возвращает "yesAuth", а вот все вместе не работает - пишет "не верный логин или пароль"...
В чем может быть проблема? я как то не правильно передаю формы?
Ответить с цитированием
  #2 (permalink)  
Старый 18.02.2017, 18:44
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

$pass = strrev(md5(clearString($_POST['pass'])));

Это зачем? В базе пароли не хранят, в базе хранят хеш пароля, ибо если вот так делать запросы к базе как у вас

$login = strtolower(clearString($_POST['login']));
$pass = strrev(md5(clearString($_POST['pass'])));

$mysqli->query("SELECT * FROM `users` WHERE `login`='$login' AND `pass`='$pass'");

то пароли всех ваших пользователей будут у меня в кармане.
Ответить с цитированием
  #3 (permalink)  
Старый 18.02.2017, 20:37
Интересующийся
Отправить личное сообщение для ПавелСедой Посмотреть профиль Найти все сообщения от ПавелСедой
 
Регистрация: 14.02.2017
Сообщений: 12

Спасибо за совет, учту, но вопрос то не в этом..
Ответить с цитированием
  #4 (permalink)  
Старый 18.02.2017, 20:41
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от ПавелСедой
вопрос то не в этом..
Это как раз главное, делайте сначала это как положено, так как и проверка при этом будет совсем иная.

Открывайте руководство РНР и читайте о подготовленных запросах misqli. Если планируется использовать версию РНР не ниже 5.5, то можно использовать Password Hashing функции.

Сделаете это, а уж потом почему, если только они будут.
Ответить с цитированием
  #5 (permalink)  
Старый 18.02.2017, 23:29
Интересующийся
Отправить личное сообщение для ПавелСедой Посмотреть профиль Найти все сообщения от ПавелСедой
 
Регистрация: 14.02.2017
Сообщений: 12

Сообщение от laimas Посмотреть сообщение
Сделаете это, а уж потом почему, если только они будут.
<?php
require_once "functions.php";

if($_SERVER["REQUEST_METHOD"] == "POST") {
	$login = strtolower(clearString($_POST['login']));
	$pass = strtolower(clearString($_POST['pass']));

	if($_POST['remrmberMe'] == 'yes'):
		setcookie('rememberMe', $login.'+'.$pass, time() + 3600*24*31, "/");
	endif;

	connectDB();
	$quer = $mysqli->query("SELECT * FROM `users` WHERE `login`='$login'");

	$userSession = $quer->fetch_array(MYSQLI_ASSOC);
	$passForCrypt = crypt($pass ,$userSession['pass']);

	if($userSession['pass'] == $passForCrypt):
		$_SESSION['auth'] = 'yesAuth';
		$_SESSION['authPass'] = $userSession['pass'];
		$_SESSION['authLogin'] = $userSession['login'];
		$_SESSION['authSurname'] = $userSession['surname'];
		$_SESSION['authName'] = $userSession['name'];
		$_SESSION['authPatronymic'] = $userSession['patronymic'];
		$_SESSION['authAddress'] = $userSession['address'];
		$_SESSION['authPhone'] = $userSession['phone'];
		$_SESSION['authEmail'] = $userSession['email'];
		$quer->close();

		echo 'yesAuth';
	else: echo 'noAuth';
	endif;
	closeDB();
}


Вот сделал так, всё равно результат не изменился...
Ответить с цитированием
  #6 (permalink)  
Старый 19.02.2017, 05:07
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от ПавелСедой
if($("#rememberMe").prop('checked')) {
authRememberMe = 'yes';
} else {
authRememberMe = 'no';
}
Выбросить, а на сервере проверка выбранного флажка, это if(isset($_POST['rememberMe'])), ибо не выбранные флажки клиентом на сервер не передаются.

Вы не сделали основного, что требовалось.

Последний раз редактировалось laimas, 19.02.2017 в 08:24.
Ответить с цитированием
  #7 (permalink)  
Старый 19.02.2017, 11:36
Интересующийся
Отправить личное сообщение для ПавелСедой Посмотреть профиль Найти все сообщения от ПавелСедой
 
Регистрация: 14.02.2017
Сообщений: 12

Сообщение от laimas Посмотреть сообщение
Вы не сделали основного, что требовалось.
В таком случае я не могу понять что требуется сделать, объясните пожалуйста... Почему не подходит crypt()? Насколько я понял он же генерирует хэш с солью и уже их я храню в базе, не так?
Ответить с цитированием
  #8 (permalink)  
Старый 19.02.2017, 11:42
Интересующийся
Отправить личное сообщение для ПавелСедой Посмотреть профиль Найти все сообщения от ПавелСедой
 
Регистрация: 14.02.2017
Сообщений: 12

Сообщение от laimas Посмотреть сообщение
Выбросить, а на сервере проверка выбранного флажка, это if(isset($_POST['rememberMe'])), ибо не выбранные флажки клиентом на сервер не передаются.
Сделал так, теперь когда нажимаю кнопку "Вход" - она прячется, а дальше вообще ничего не происходит.. Ошибку о не правильно логине или пароле не выдает и страница не перезагружается..
Ответить с цитированием
  #9 (permalink)  
Старый 19.02.2017, 12:51
Аватар для Malleys
Профессор
Отправить личное сообщение для Malleys Посмотреть профиль Найти все сообщения от Malleys
 
Регистрация: 20.12.2009
Сообщений: 1,714

Вам нельзя сделать кнопку отправки? <input type="submit">
Я не знаю, что у вас там отправлялось... без кнопки отправки.

Вы там написали скрипт, но он только один раз после загрузки документа срабатывает!
$(document).ready(function() {
// это сработает сразу, а вам надо когда пользователь отправляет форму
});

Проверил с
<?php

print_r($_POST);

Теперь работает...
Array
(
    [login] => йцукен
    [pass] => 12345
    [rememberMe] => no
)


При проверке в форму добавил <input type="submit">


$(document).ready(function() { ... });


заменил на

$("form").on("submit", function() {
...
return false;
});

Последний раз редактировалось Malleys, 19.02.2017 в 12:56.
Ответить с цитированием
  #10 (permalink)  
Старый 19.02.2017, 13:12
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,989

Сообщение от ПавелСедой
Почему не подходит crypt()? Насколько я понял он же генерирует хэш с солью и уже их я храню в базе, не так?
А где здесь $pass = strrev(md5(clearString($_POST['pass']))); crypt(), тут md5 перевернутая, где соль? ) Подойдет конечно, но если РНР 5.5 то то что я говорил. Ну а самое страшное, это дыра в запросе, да еще к такой таблице.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка нескольких форм ПХП в цикле kosta Events/DOM/Window 4 25.09.2016 22:51
Обработка нескольких форм на странице cyber_bober Events/DOM/Window 10 18.11.2014 06:19
Обработка ajax ошибок Tek Angular.js 5 15.05.2014 14:10
Обработка данных во время AJAX запроса user783 AJAX и COMET 5 09.12.2011 03:24
Отправка нескольких форм с помощью ajax voloxa89 jQuery 2 28.09.2011 22:08